package gob.osinerg.emergencia.action;

import gob.osinerg.emergencia.bean.ActividadBean;
import gob.osinerg.emergencia.bean.FormularioEmergenciaUnmay;
import gob.osinerg.emergencia.bean.SiniestroPreliminar;
import gob.osinerg.emergencia.bean.SiniestroPreliminarAccidentado;
import gob.osinerg.emergencia.bean.UnidadOperativaBean;
import gob.osinerg.emergencia.bean.UsuarioBean;
import gob.osinerg.emergencia.form.SiniestroPreliminarForm;
import gob.osinerg.emergencia.service.GenericService;
import gob.osinerg.emergencia.service.SiniestroPreliminarService;
import gob.osinerg.emergencia.util.Constants;
import gob.osinerg.emergencia.util.Report;
import gob.osinergmin.siged.remote.rest.ro.out.ExpedienteOutRO;

import java.io.File;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.util.ResourceUtils;

public class SiniestroPreliminarAction extends GenericAction {

	private Log log = LogFactory.getLog(SiniestroPreliminarAction.class);

	private SiniestroPreliminarService service;
	private GenericService genericService;

	public ActionForward inicio(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {

		List listaTipoSiniestro = service.listarTipoSiniestro();	
		request.setAttribute(Constants.LISTA_TIPO_SINIESTRO, listaTipoSiniestro);
				
		SiniestroPreliminarForm form = (SiniestroPreliminarForm) actionForm;
		form.setBean(new SiniestroPreliminar());
		

		form.getListaAccidentado().clear();
		
		return actionMapping.findForward("inicio");
	}
	
	public ActionForward doSave(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {
		DecimalFormat formateador = new DecimalFormat("0000");
		SiniestroPreliminarForm form = (SiniestroPreliminarForm) actionForm;
		String message = "messages.insert.successful";
		ExpedienteOutRO expedienteOutRo = null;
		try {
			// Seteando valores formulario Nro2
			SiniestroPreliminar bean = (SiniestroPreliminar) form.getBean();
			FormularioEmergenciaUnmay beanform = new FormularioEmergenciaUnmay();
			HttpSession session = request.getSession();
			UnidadOperativaBean unidadOperativa = (UnidadOperativaBean) session
					.getAttribute("UnidadOperativaBean");
			UsuarioBean usuario = (UsuarioBean) session.getAttribute("UsuarioBean");
			ActividadBean actividad=(ActividadBean)session.getAttribute("ActividadBean");
			Long idUnidadOperativa = Long.valueOf(unidadOperativa.getCodigo());
			
			//Seteando valores formulario emergencia unmay
			beanform.setUniopeId(idUnidadOperativa);
			beanform.setCdgoOsinerg(unidadOperativa.getCodigoOsinerg());
			beanform.setRegistroDgh(bean.getRegistroDgh());
			beanform.setFrmlarioId(new Long(2));
			beanform.setTpoEmrgncia("SI");
			beanform.setEstado("GE");
			beanform.setMdioInfrmtvo("SEM");
			beanform.setActiviId(new Long(actividad.getCodigo()));
			beanform.setFchaEmrgncia(bean.getFechaSiniestro());
			beanform.setUsrioCrdor(usuario.getCodigoLogin());
			beanform.setFchaCrcion(new Date());
			
			//String imageLogo = request.getRequestURL().substring(0, request.getRequestURL().lastIndexOf("/"))+"/images/logo_home.jpg";
			
			bean.setUsrioCrdor(usuario.getCodigoLogin());
			bean.setFchaCrcion(new Date());

			bean.setListaAccidentado(form.getListaAccidentado());
			
			service.save(bean, beanform);// MODIFICAMOS ESTE METODO PARA EL SIGED
			bean.setIdFormato("F2"+formateador.format(bean.getId()));
			sendSuccessfulMessage(request, message);
			
			List listaTipoSiniestro = service.listarTipoSiniestro();	
			request.setAttribute(Constants.LISTA_TIPO_SINIESTRO, listaTipoSiniestro);
			
		} catch (Exception ex) {
			log.error(ex.getMessage());
			ex.printStackTrace();
			message = "errors.update.failed.finalParam";
			throw new Exception(ex.getMessage());
		}

		return actionMapping.findForward("inicio");
	}
	
	
	public ActionForward exportar(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
    	
		SiniestroPreliminarForm form = (SiniestroPreliminarForm)actionForm;
		SiniestroPreliminar bean = (SiniestroPreliminar) form.getBean();
    	
    	try{
            request.setAttribute("actionReport","siniestroPreliminar.do");
 
            Map parameters = new HashMap();
            parameters.put("ID", bean.getId());
            parameters.put("IMAGE_LOGO", request.getRequestURL().substring(0, request.getRequestURL().lastIndexOf("/"))+"/images/logo_home.jpg");

            File archivo = ResourceUtils.getFile("classpath:gob/osinerg/emergencia/resource/jrxml/SiniestroPreliminar.jrxml");
            String subreportDir = archivo.getPath().substring(0,archivo.getPath().lastIndexOf(File.separator))+File.separator;
            parameters.put("SUBREPORT_DIR",subreportDir);            

    		Report report = new Report();
    		report.setJasperReport(archivo);
    		report.setParameter(parameters);
    		report.setConnection(genericService.getConnection());
    		
    		report.PDF(request, response);   		
   		
    	}catch(Exception ex){
    		log.error(ex.getMessage());
    	}
        return null;
    }
	
	public ActionForward agregarAccidentado(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {
		System.out.println("Ingresando a agregarAccidentado");
		
		boolean grabarAccidentado = true;
		SiniestroPreliminarAccidentado accidentado = new SiniestroPreliminarAccidentado();
		SiniestroPreliminarForm form = (SiniestroPreliminarForm) actionForm;
	
		accidentado.setNombre(((SiniestroPreliminar)form.getBean()).getNombreAccidentado());
		accidentado.setDni_ce(((SiniestroPreliminar)form.getBean()).getDniAccidentado());
		((SiniestroPreliminar)form.getBean()).setNombreAccidentado("");
		((SiniestroPreliminar)form.getBean()).setDniAccidentado("");
		for(int i=0; i<form.getListaAccidentado().size();i++) {
			SiniestroPreliminarAccidentado dniLista = (SiniestroPreliminarAccidentado)form.getListaAccidentado().get(i);
			String dniTmp = ((SiniestroPreliminar)form.getBean()).getDniAccidentado();
			if(dniLista.getDni_ce().equals(dniTmp)) {
				grabarAccidentado = false;
				break;
			}
		}
		if(grabarAccidentado) {
			form.getListaAccidentado().add(accidentado);
		} else {
			String message = "emergencias.dni.registrado";
			sendErrorMessage(request, message);
		}
		
		List listaTipoSiniestro = service.listarTipoSiniestro();	
		request.setAttribute(Constants.LISTA_TIPO_SINIESTRO, listaTipoSiniestro);		
		
		return actionMapping.findForward("inicio");
	}
	
	public ActionForward eliminarAccidentado(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {
		System.out.println("Ingresando a eliminarAccidentado");
		
		SiniestroPreliminarForm form = (SiniestroPreliminarForm) actionForm;
		
		for(int i=0; i<form.getListaAccidentado().size();i++){			
			if( i == ((SiniestroPreliminar)form.getBean()).getIndexEliminar().intValue() ){
				form.getListaAccidentado().remove(i);
			}
		}

		List listaTipoSiniestro = service.listarTipoSiniestro();	
		request.setAttribute(Constants.LISTA_TIPO_SINIESTRO, listaTipoSiniestro);		
				
		return actionMapping.findForward("inicio");
	}	
	
	public ActionForward eliminarTodosAccidentados(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {
		System.out.println("Ingresando a eliminarTodosAccidentados");
		
		SiniestroPreliminarForm form = (SiniestroPreliminarForm) actionForm;
		
		for(int i=0; i<form.getListaAccidentado().size();i++){			
				form.getListaAccidentado().remove(i);
		}

		List listaTipoSiniestro = service.listarTipoSiniestro();	
		request.setAttribute(Constants.LISTA_TIPO_SINIESTRO, listaTipoSiniestro);		
				
		return actionMapping.findForward("inicio");
	}
	
	public void setGenericService(GenericService genericService) {
		this.genericService = genericService;
	}

	public void setService(SiniestroPreliminarService service) {
		this.service = service;
	}

}
